home *** CD-ROM | disk | FTP | other *** search
/ User's Choice Windows CD / User's Choice Windows CD (CMS Software)(1993).iso / win_u_z / vlistsam.zip / VLSETCUR.C < prev   
C/C++ Source or Header  |  1992-09-15  |  6KB  |  162 lines

  1. #include "vlistint.h"
  2.  
  3. LONG vlbSetCurSel( PVLBOX pVLBox, int nOption, LONG lParam)
  4. {
  5.    int i;
  6.    if ( pVLBox->wFlags & USEDATAVALUES ) {
  7.        switch ( nOption) {
  8.  
  9.           case VLB_FIRST:
  10.               VLBFirstPage(pVLBox);
  11.               SendMessage(pVLBox->hwndList, LB_SETCURSEL, 0, 0L);
  12.               SetSelectedItem(pVLBox);
  13.           break;
  14.  
  15.           case VLB_PREV:
  16.              if ( (i=vlbFindData(pVLBox, lParam)) == LB_ERR ) {
  17.                 if  ( VLBFindPage(pVLBox, (LONG)lParam, TRUE) ) {
  18.                     return VLB_ERR;
  19.                 }
  20.                 if ( pVLBox->nCountInBox < pVLBox->nLines ) {
  21.                    VLBLastPage(pVLBox);
  22.                 }
  23.                 else {
  24.                     InvalidateRect(pVLBox->hwndList, NULL, TRUE);
  25.                     UpdateWindow(pVLBox->hwndList);
  26.                 }
  27.              }
  28.              i=vlbFindData(pVLBox, lParam);
  29.              if ( i == 0 ) {
  30.                 if ( VLBScrollUpLine(pVLBox) )
  31.                     return VLB_ERR;
  32.                 else
  33.                     SendMessage(pVLBox->hwndList, LB_SETCURSEL, 0, 0L);
  34.                     SetSelectedItem(pVLBox);
  35.              }
  36.              else {
  37.                 SendMessage(pVLBox->hwndList, LB_SETCURSEL, i-1, 0L);
  38.                 SetSelectedItem(pVLBox);
  39.              }
  40.           break;
  41.  
  42.           case VLB_NEXT:
  43.              if ( (i=vlbFindData(pVLBox, lParam)) == LB_ERR ) {
  44.                 if  ( VLBFindPage(pVLBox, (LONG)lParam, TRUE) ) {
  45.                     return VLB_ERR;
  46.                 }
  47.                 UpdateWindow(pVLBox->hwndList);
  48.                 i=vlbFindData(pVLBox, lParam);
  49.              }
  50.              if ( i == (pVLBox->nCountInBox-1) ) {
  51.                 if ( VLBScrollDownLine(pVLBox) )
  52.                     return VLB_ERR;
  53.                 else
  54.                     SendMessage(pVLBox->hwndList, LB_SETCURSEL, pVLBox->nCountInBox-1, 0L);
  55.                     SetSelectedItem(pVLBox);
  56.              }
  57.              else {
  58.                 if ( SendMessage(pVLBox->hwndList, LB_SETCURSEL, i+1, 0L) == -1L )
  59.                     return VLB_ERR;
  60.                 SetSelectedItem(pVLBox);
  61.              }
  62.           break;
  63.  
  64.           case VLB_LAST:
  65.               VLBLastPage(pVLBox);
  66.               SendMessage(pVLBox->hwndList, LB_SETCURSEL, pVLBox->nCountInBox-1, 0L);
  67.               SetSelectedItem(pVLBox);
  68.           break;
  69.  
  70.           case VLB_FINDITEM:
  71.              if ( (i=vlbFindData(pVLBox, lParam)) == LB_ERR ) {
  72.                 vlbRedrawOff(pVLBox);
  73.                 if  ( VLBFindPage(pVLBox, (LONG)lParam, TRUE) )
  74.                     return VLB_ERR;
  75.                 else {
  76.                     if ( pVLBox->nCountInBox < pVLBox->nLines ) {
  77.                        VLBLastPage(pVLBox);
  78.                     }
  79.                     i=vlbFindData(pVLBox, lParam);
  80.                     SendMessage(pVLBox->hwndList, LB_SETCURSEL, i, 0L);
  81.                     pVLBox->lSelItem = (LONG) lParam;
  82.                 }
  83.                 vlbRedrawOn(pVLBox);
  84.              }
  85.              else {
  86.                 SendMessage(pVLBox->hwndList, LB_SETCURSEL, i, 0L);
  87.                 SetSelectedItem(pVLBox);
  88.              }
  89.           break;
  90.        }
  91.    }
  92.    else {
  93.        pVLBox->vlbStruct.lIndex = lParam;
  94.        switch ( nOption) {
  95.           case VLB_FIRST:
  96.               VLBFirstPage(pVLBox);
  97.               SendMessage(pVLBox->hwndList, LB_SETCURSEL, 0, 0L);
  98.               SetSelectedItem(pVLBox);
  99.           break;
  100.  
  101.           case VLB_LAST:
  102.               VLBLastPage(pVLBox);
  103.               SendMessage(pVLBox->hwndList, LB_SETCURSEL, pVLBox->nCountInBox-1, 0L);
  104.               SetSelectedItem(pVLBox);
  105.           break;
  106.  
  107.           case VLB_PREV:
  108.              if ( pVLBox->vlbStruct.lIndex > pVLBox->lToplIndex &&
  109.                   pVLBox->vlbStruct.lIndex <= (pVLBox->lToplIndex+(LONG)(pVLBox->nCountInBox)-1)) {
  110.                 if ( SendMessage(pVLBox->hwndList, LB_SETCURSEL, (int)(pVLBox->vlbStruct.lIndex-pVLBox->lToplIndex)-1, 0L) == -1L)
  111.                     return VLB_ERR;
  112.                 else
  113.                     SetSelectedItem(pVLBox);
  114.              }
  115.              else {
  116.                 if ( VLBScrollUpLine(pVLBox) )
  117.                     return VLB_ERR;
  118.                 else {
  119.                     SendMessage(pVLBox->hwndList, LB_SETCURSEL, 0, 0L);
  120.                     SetSelectedItem(pVLBox);
  121.                 }
  122.              }
  123.           break;
  124.  
  125.           case VLB_NEXT:
  126.              if ( pVLBox->vlbStruct.lIndex >= pVLBox->lToplIndex &&
  127.                   pVLBox->vlbStruct.lIndex < (pVLBox->lToplIndex+(LONG)(pVLBox->nCountInBox)-1)) {
  128.                 if ( SendMessage(pVLBox->hwndList, LB_SETCURSEL, (int)(pVLBox->vlbStruct.lIndex-pVLBox->lToplIndex)+1, 0L) == -1L )
  129.                     return VLB_ERR;
  130.                 else
  131.                     SetSelectedItem(pVLBox);
  132.              }
  133.              else {
  134.                 if ( VLBScrollDownLine(pVLBox) )
  135.                     return VLB_ERR;
  136.                 else {
  137.                     SendMessage(pVLBox->hwndList, LB_SETCURSEL, pVLBox->nLines-1, 0L);
  138.                     SetSelectedItem(pVLBox);
  139.                 }
  140.              }
  141.           break;
  142.  
  143.           case VLB_FINDITEM:
  144.              if ( pVLBox->vlbStruct.lIndex >= pVLBox->lToplIndex &&
  145.                   pVLBox->vlbStruct.lIndex <= (pVLBox->lToplIndex+(LONG)(pVLBox->nCountInBox)-1)) {
  146.                 SendMessage(pVLBox->hwndList, LB_SETCURSEL, (int)(pVLBox->vlbStruct.lIndex-pVLBox->lToplIndex), lParam);
  147.                 SetSelectedItem(pVLBox);
  148.              }
  149.              else {
  150.                 if ( VLBFindPage(pVLBox, pVLBox->vlbStruct.lIndex, TRUE) )
  151.                     return VLB_ERR;
  152.                 else {
  153.                     SendMessage(pVLBox->hwndList, LB_SETCURSEL, 0, 0L);
  154.                     SetSelectedItem(pVLBox);
  155.                 }
  156.              }
  157.           break;
  158.        }
  159.    }
  160.    return (LONG)VLB_OK;
  161. }
  162.